/*
 * iSistemaBUS.h
 *
 *  Created on: 13/07/2014
 *      Author: migue
 */

#ifndef ISISTEMABUS_H_
#define ISISTEMABUS_H_

#include "../defines.h"
#include "../ipc/ColaMensajes.h"
#include "../ipc/ColaInterfaz.h"

class iSistemaBUS {
public:
	iSistemaBUS();

	// Metodo para el BUS
	/**
	 * retorna el numDeBus que pidio el repuesto
	 */
	int esperarPedidoDeRepuesto(Tipos::LugarDeSala& destino);

	/**
	 * retorna el id de la persona subida,
	 * 0 si no hay mas personas.
	 */
	int esperarSubidaDePersona(int numBusRoto);

	// Metodos para el BUS roto
	/**
	 * Bus roto envia solicitud de Respuesto
	 */
	void peticionDeBusDeRepuesto(int numBusRoto, Tipos::LugarDeSala lugarDestino);

	/**
	 * Bus roto espera una solicitud para enviar un id de Persona al bus de reemplazo
	 */
	void esperarPeticionYEnviarPersona(int idPersona, int numBusRoto);

	virtual ~iSistemaBUS();

private:

	void lanzarCorteDeColas(int id);

	void informarEsperaABroker();

	//ColaMensajes _colaSistema;
	ColaMensajes _cEnvio;
	ColaInterfaz _cRecibo;

	int _idRepuestoBusGeneral;
	int _idBusRepuesto;
	int _numBusRoto;


	int _idBroker;
	int _idBusRoto;

	bool _CCLanzado;
	int _pidR, _pidE;

};

#endif /* ISISTEMABUS_H_ */
